#include "io.h"





const MCULIB_GPIO_STRUCT LEDR_OUT= {RCU_GPIOA,GPIOA,GPIO_MODE_OUTPUT,GPIO_PUPD_NONE,GPIO_OTYPE_PP,GPIO_OSPEED_10MHZ,GPIO_PIN_6};;
const MCULIB_GPIO_STRUCT LEDG_OUT= {RCU_GPIOA,GPIOA,GPIO_MODE_OUTPUT,GPIO_PUPD_NONE,GPIO_OTYPE_PP,GPIO_OSPEED_10MHZ,GPIO_PIN_5};;

const MCULIB_GPIO_STRUCT POWER_SW_OUT=     {RCU_GPIOA,GPIOA,GPIO_MODE_OUTPUT,GPIO_PUPD_NONE,GPIO_OTYPE_PP,GPIO_OSPEED_10MHZ,GPIO_PIN_1};
const MCULIB_GPIO_STRUCT POWER_KEY_INPUT=  {RCU_GPIOA,GPIOA,GPIO_MODE_INPUT,GPIO_PUPD_PULLUP,GPIO_OTYPE_OD,GPIO_OSPEED_10MHZ,GPIO_PIN_2};

const MCULIB_GPIO_STRUCT HW_INPUT= {RCU_GPIOA,GPIOA,GPIO_MODE_INPUT,GPIO_PUPD_PULLUP,GPIO_OTYPE_OD,GPIO_OSPEED_10MHZ,GPIO_PIN_3};
const MCULIB_GPIO_STRUCT RESET_KEY_INPUT=  {RCU_GPIOA,GPIOA,GPIO_MODE_INPUT,GPIO_PUPD_PULLUP,GPIO_OTYPE_OD,GPIO_OSPEED_10MHZ,GPIO_PIN_0};



void io_init(void)
{
    mculib_gpio_init((MCULIB_GPIO_STRUCT *)&LEDR_OUT);
    mculib_gpio_init((MCULIB_GPIO_STRUCT *)&LEDG_OUT);
    ledR_off();
    ledG_off();
    
    mculib_gpio_init((MCULIB_GPIO_STRUCT *)&POWER_KEY_INPUT);
    mculib_gpio_init((MCULIB_GPIO_STRUCT *)&POWER_SW_OUT);
    power_sw_off();
    
    mculib_gpio_init((MCULIB_GPIO_STRUCT *)&HW_INPUT);
    mculib_gpio_init((MCULIB_GPIO_STRUCT *)&RESET_KEY_INPUT);
}

void power_sw_off()
{
    mculib_gpio_reset((MCULIB_GPIO_STRUCT *)&POWER_SW_OUT);
}
void power_sw_on()
{
    mculib_gpio_set((MCULIB_GPIO_STRUCT *)&POWER_SW_OUT);
}
uint8_t power_key_input_get(void)
{
    return mculib_gpio_get((MCULIB_GPIO_STRUCT *)&POWER_KEY_INPUT);
}

uint8_t hw_input_get(void)
{
    return mculib_gpio_get((MCULIB_GPIO_STRUCT *)&HW_INPUT);
}
uint8_t reset_key_input_get(void)
{
    return mculib_gpio_get((MCULIB_GPIO_STRUCT *)&RESET_KEY_INPUT);
}
uint8_t KEY_STATE_get(uint8_t key)
{
    switch(key)
    {
        case 0:
            return power_key_input_get();
            break;
        case 1:
            return hw_input_get();
            break;
        case 2:
            return reset_key_input_get();
            break;
    }
    return power_key_input_get();
}




void ledR_on(void)
{
    mculib_gpio_reset((MCULIB_GPIO_STRUCT *)&LEDR_OUT);
}
void ledR_off(void)
{
    mculib_gpio_set((MCULIB_GPIO_STRUCT *)&LEDR_OUT);
}
void ledR_not(void)
{
    mculib_gpio_not((MCULIB_GPIO_STRUCT *)&LEDR_OUT);
}

void ledG_on(void)
{
    mculib_gpio_reset((MCULIB_GPIO_STRUCT *)&LEDG_OUT);
}
void ledG_off(void)
{
    mculib_gpio_set((MCULIB_GPIO_STRUCT *)&LEDG_OUT);
}
void ledG_not(void)
{
    mculib_gpio_not((MCULIB_GPIO_STRUCT *)&LEDG_OUT);
}





